package ru.ipo.dces.kioschool2;

import ru.ipo.dces.clientservercommunication.ConnectToContestRequest;
import ru.ipo.dces.clientservercommunication.ConnectToContestResponse;
import ru.ipo.dces.clientservercommunication.SubmitSolutionRequest;
import ru.ipo.dces.clientservercommunication.SubmitSolutionResponse;
import ru.ipo.dces.exceptions.GeneralRequestFailureException;
import ru.ipo.dces.exceptions.ServerReturnedError;
import ru.ipo.dces.server.http.HttpServer;
import ru.ipo.dces.utils.ResultUtils;

import java.util.Random;

/**
 * Created by IntelliJ IDEA.
 * User: ilya
 * Date: 20.04.11
 * Time: 1:13
 */
public class SubmissionExample {

    public static void main(String[] args) throws GeneralRequestFailureException, ServerReturnedError {

        HttpServer server = new HttpServer("http://vm-2.spb.ru/~posov/dces/dces.php");

        //Заполняем запрос на соединение с соревнованием
        ConnectToContestRequest connectRequest = new ConnectToContestRequest();
        connectRequest.contestID = 1; //соревнование для тестирования модулей проекта "школа КИО II уровень" имеет номер 1
        connectRequest.login = "iposov"; //логин участника
        connectRequest.password = "pass"; //пароль участника

        //Выполняем запрос на соединение с соревнованием. При ошибке возникнет исключение
        ConnectToContestResponse connectResponse = server.doRequest(connectRequest);

        /*
        Для тех, кто не использует Java. doRequest() выполняет следующий post-запрос
        POST запрос: x=O:23:"ConnectToContestRequest":3:{s:9:"contestID";i:1;s:5:"login";s:6:"iposov";s:8:"password";s:4:"pass";}
        ответ: N;O:24:"ConnectToContestResponse":3:{s:9:"sessionID";s:24:"l5QFPKZqhZavjCNFaLEkX3WQ";s:4:"user";O:15:"UserDescription":5:{s:6:"userID";i:5;s:5:"login";s:6:"iposov";s:8:"password";s:13:"test_password";s:9:"dataValue";a:2:{i:0;s:10:"Посов";i:1;s:34:"Тестирование КИО II";}s:8:"userType";s:11:"Participant";}s:10:"finishTime";i:1334828880;}

        ответ должен начинаться с N;, это означает отсутствие ошибки
        */

        //Номер сессии используется далее для других запросов. Может использоваться многократно, поэтмоу
        //требуется только одно соединение с соревнованием
        String sessionID = connectResponse.sessionID;

        //Пошлем результат на проверку
        SubmitSolutionRequest submitRequest = new SubmitSolutionRequest();
        submitRequest.sessionID = sessionID;
        submitRequest.problemID = 1; //задача для тестирования модулей проекта "школа КИО II уровень" имеет номер 1
        submitRequest.problemResult = ResultUtils.newMap(
                "answer",
                new Random().nextBoolean() ? "0" : "1" // выбираем случайно 0 или 1 как да или нет
        ); //метод newMap() создает новый HashMap<String,String> и заполняет его указанными ключами и значениями

        //отсылаем сообщение. При ошибке возникнет исключение
        SubmitSolutionResponse submitResponse = server.doRequest(submitRequest);

        //выводим на экран идентификатор отсылки. Нам он не понадобится, но лишний раз продемонстирует, что
        //запрос завершился успешно.
        System.out.println("submission id = " + submitResponse.submissionId);

        /*
        POST запрос: x=O:21:"SubmitSolutionRequest":3:{s:9:"sessionID";s:24:"l5QFPKZqhZavjCNFaLEkX3WQ";s:9:"problemID";i:1;s:13:"problemResult";a:1:{s:6:"answer";s:1:"1";}}
        ответ: N;O:22:"SubmitSolutionResponse":1:{s:12:"submissionId";i:6;}
        */

    }

}
